package com.info33.platform.system.service.impl;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.info33.platform.common.constant.TableConstant;
import com.info33.platform.common.exception.TransactionalException;
import com.info33.platform.common.mvc.vo.Result;
import com.info33.platform.system.dao.SysConfigDao;
import com.info33.platform.system.dao.SysConfigImgDao;
import com.info33.platform.system.dto.SysConfigDTO;
import com.info33.platform.system.entity.SysConfig;
import com.info33.platform.system.entity.SysConfigImg;
import com.info33.platform.system.entity.SysTenant;
import com.info33.platform.system.service.SysConfigService;
import com.info33.platform.system.service.SysTenantService;
import com.info33.platform.system.vo.SysConfigVO;
import com.info33.platform.system.vo.SysUserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;

/**
 * @author admin
 */
@Service
public class SysConfigServiceImpl extends ServiceImpl<SysConfigDao, SysConfig> implements SysConfigService {

    @Autowired
    private SysConfigDao sysConfigDao;
    @Autowired
    private SysTenantService sysTenantService;

    @Override
    public Result<SysConfig> pcConfig(SysConfigDTO dto) {
        dto.getSysTenantDTO().setUrl(sysTenantService.devUrl(dto.getSysTenantDTO().getUrl()));
        // 先判断租户信息
        SysTenant sysTenant = sysTenantService.getOne(new QueryWrapper<SysTenant>()
                .eq("url", dto.getSysTenantDTO().getUrl())
                .last(TableConstant.LIMIT_ONE));
        if (ObjectUtils.isEmpty(sysTenant)) {
            return Result.error("该域名租户不存在");
        }
        if (Boolean.FALSE.equals(sysTenant.getActivate())) {
            return Result.error("该租户已经被冻结");
        }
        dto.getSysTenantDTO().setId(sysTenant.getId());
        SysConfig sysConfig = sysConfigDao.pcConfig(dto);
        if (ObjectUtils.isEmpty(sysConfig)) {
            return Result.error("该租户配置项不存在");
        }
        return Result.ok(sysConfig);
    }

    @Override
    public IPage<SysConfigVO> pcPage(Page<SysConfig> page, SysUserVO currentUser) {
        return sysConfigDao.pcPage(page, currentUser);
    }
}